﻿#ifndef QGPUINFOPROVIDER_H
#define QGPUINFOPROVIDER_H

#include <QMutex>
#include <QObject>
#include <QtGlobal>
#include "nvml.h"

class QGpuInfoProvider {
public:
    struct GpuDetails {
        QString name;                      ///< GPU 名称（如 "Tesla V100"）
        QString pciBusId;                  ///< PCI Bus ID
        QString pciGpuLinkWidth;           ///< 当前 PCIe 链路宽度（如 "x16"）
        QString pciGen;                    ///< PCIe 版本（如 Gen3, Gen4）
        int index;                         ///< GPU 索引号
        qint64 temperature;                ///< 温度（摄氏度）
        qint64 powerUsage;                 ///< 功耗（毫瓦）
        qint64 memoryTotal;                ///< 总显存（字节）
        qint64 memoryUsed;                 ///< 已用显存（字节）
        qint64 memoryFree;                 ///< 剩余显存（字节）
        QString driverMode;                ///< 当前驱动模式（如 WDDM、TCC）
        QString gridLicenseFeature;        ///< GRID 授权特征（如是否启用 vGPU）
        bool isBlacklisted;                ///< 是否在黑名单中
        QString uuid;                      ///< GPU UUID
    };
public:
    ///< 获取单例实例
    static QGpuInfoProvider& getInstance();
    ///< 删除单例
    static void deleteInstance();

    ///< 获取系统级GPU使用率（0-100%）
    double usage();
    ///< 获取系统GPU数量
    unsigned int getDeviceCount() const;

    QList<GpuDetails> getAllGpuDetails() const;

private:
    QGpuInfoProvider();
    ~QGpuInfoProvider();
private:
    static QGpuInfoProvider* instance;
    static QMutex mutex;

    unsigned int deviceCount;
};
#endif ///< QGPUINFOPROVIDER_H
